Messages পাঠানো এবং গ্রহণ করা (Event Aggregator)

Microsoft Technologies - এমভিভিএম (MVVM) MVVM এবং Messaging System |
193
193

Event Aggregator হল একটি ডিজাইন প্যাটার্ন যা MVVM আর্কিটেকচারে বিভিন্ন ভিউ (Views) এবং ভিউমডেল (ViewModels)-এর মধ্যে কম্পোনেন্ট বা উপাদানগুলির মধ্যে যোগাযোগ বা বার্তা পাঠানো এবং গ্রহণের জন্য ব্যবহৃত হয়। এটি মূলত একটি সেন্ট্রালাইজড ইভেন্ট সিস্টেম হিসেবে কাজ করে, যা এক ভিউ বা ভিউমডেল থেকে অন্য ভিউ বা ভিউমডেলে বার্তা পাঠাতে সহায়তা করে।

এই প্যাটার্নটি খুবই কার্যকরী যখন আপনার অ্যাপ্লিকেশনটির বিভিন্ন অংশের মধ্যে loosely coupled (স্বতন্ত্র) কম্পোনেন্টের মধ্যে ডেটা বা ইভেন্ট শেয়ার করতে হয়, বিশেষ করে যখন একাধিক ভিউ বা ভিউমডেল একে অপরের সাথে সরাসরি যোগাযোগ করতে সক্ষম নয়।


Event Aggregator কী?

Event Aggregator হল একটি মিডিয়েটর, যা একাধিক কম্পোনেন্ট বা সিস্টেমের মধ্যে ইভেন্ট পাঠানোর এবং গ্রহণ করার কাজ করে। এটি ভিউ এবং ভিউমডেলগুলিকে একে অপরের সাথে সরাসরি যোগাযোগ করতে বাধা দেয়, ফলে আপনি একটি সেন্ট্রাল হাব (কমপ্লেক্স লজিকের বাইরে) এর মাধ্যমে ইভেন্ট শেয়ার করতে পারেন। এর মাধ্যমে আপনি সমস্ত ইভেন্ট এবং বার্তা একত্রে পরিচালনা করতে পারেন, এবং অন্যান্য কম্পোনেন্টগুলির সঙ্গে সঙ্কলন কমানোর মাধ্যমে অ্যাপ্লিকেশনটির মডুলারিটি বজায় রাখতে পারেন।

Event Aggregator এর প্রধান উপাদান:

  1. Publisher: এই কম্পোনেন্ট বা ভিউমডেল, যেটি ইভেন্ট বা বার্তা তৈরি করে এবং তা প্রকাশ করে (পাঠায়)।
  2. Subscriber: এই কম্পোনেন্ট বা ভিউমডেল, যেটি একটি নির্দিষ্ট ইভেন্ট বা বার্তা গ্রহণ করে এবং এর উপর নির্দিষ্ট অ্যাকশন গ্রহণ করে।
  3. Event Aggregator: এটি একটি সেন্ট্রাল কম্পোনেন্ট, যা সমস্ত পাবলিশড ইভেন্টকে একত্রিত করে এবং সাবস্ক্রাইবারদের কাছে সেই ইভেন্টগুলি প্রেরণ করে।

Event Aggregator কিভাবে কাজ করে?

ধরা যাক, আমাদের একটি অ্যাপ্লিকেশনে দুটি ভিউ বা ভিউমডেল আছে: একটিতে একটি বোতাম ক্লিক করলে অন্য ভিউতে কিছু পরিবর্তন ঘটাতে হবে। এখানে, Event Aggregator ব্যবহৃত হলে, এক ভিউ বা ভিউমডেল থেকে অন্য ভিউ বা ভিউমডেলকে কোনো ইভেন্ট বা বার্তা পাঠানো হবে এবং এটি সরাসরি যোগাযোগের পরিবর্তে Event Aggregator এর মাধ্যমে করা হবে।


Event Aggregator ব্যবহার করার উদাহরণ

এখন, একটি সাধারণ Event Aggregator উদাহরণ দেখা যাক যেখানে একটি Message পাঠানো এবং গ্রহণ করা হচ্ছে।

1. Event Class তৈরি করা

প্রথমে একটি ইভেন্ট ক্লাস তৈরি করতে হবে, যা এক ভিউমডেল থেকে অন্য ভিউমডেল বা ভিউতে বার্তা পাঠাতে কাজ করবে।

public class MessageEvent
{
    public string Message { get; set; }
}

2. Event Aggregator Interface

এখন, ইভেন্টগুলি পরিচালনার জন্য একটি IEventAggregator ইন্টারফেস তৈরি করা হবে। এটি সমস্ত পাবলিশড ইভেন্টকে সাবস্ক্রাইবারদের কাছে পাঠানোর কাজ করবে।

public interface IEventAggregator
{
    void Publish<TEvent>(TEvent eventToPublish);
    void Subscribe<TEvent>(Action<TEvent> action);
    void Unsubscribe<TEvent>(Action<TEvent> action);
}

3. Event Aggregator Implementation

এখানে একটি সাধারণ Event Aggregator ইমপ্লিমেন্টেশন দেওয়া হলো:

public class EventAggregator : IEventAggregator
{
    private readonly Dictionary<Type, List<Delegate>> _subscribers = new Dictionary<Type, List<Delegate>>();

    public void Publish<TEvent>(TEvent eventToPublish)
    {
        if (_subscribers.ContainsKey(typeof(TEvent)))
        {
            foreach (var action in _subscribers[typeof(TEvent)])
            {
                ((Action<TEvent>)action)(eventToPublish);
            }
        }
    }

    public void Subscribe<TEvent>(Action<TEvent> action)
    {
        if (!_subscribers.ContainsKey(typeof(TEvent)))
        {
            _subscribers[typeof(TEvent)] = new List<Delegate>();
        }
        _subscribers[typeof(TEvent)].Add(action);
    }

    public void Unsubscribe<TEvent>(Action<TEvent> action)
    {
        if (_subscribers.ContainsKey(typeof(TEvent)))
        {
            _subscribers[typeof(TEvent)].Remove(action);
        }
    }
}

4. Publisher (Sender) তৈরি করা

এখন, একটি Publisher তৈরি করি, যেটি একটি ইভেন্ট বা বার্তা পাঠাবে। এই ভিউমডেলটি বার্তা পাঠানোর জন্য Publish মেথড ব্যবহার করবে।

public class PublisherViewModel
{
    private readonly IEventAggregator _eventAggregator;

    public PublisherViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
    }

    public void SendMessage()
    {
        var messageEvent = new MessageEvent { Message = "Hello from Publisher!" };
        _eventAggregator.Publish(messageEvent);
    }
}

5. Subscriber (Receiver) তৈরি করা

এখন, একটি Subscriber তৈরি করি, যেটি Publisher থেকে বার্তা গ্রহণ করবে। এটি Subscribe মেথড ব্যবহার করবে।

public class SubscriberViewModel
{
    private readonly IEventAggregator _eventAggregator;

    public SubscriberViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe<MessageEvent>(OnMessageReceived);
    }

    private void OnMessageReceived(MessageEvent messageEvent)
    {
        Console.WriteLine($"Message Received: {messageEvent.Message}");
    }
}

6. MainApp

অবশেষে, আমরা অ্যাপ্লিকেশনে Publisher এবং Subscriber একত্রিত করব এবং EventAggregator ব্যবহার করে ইভেন্ট শেয়ার করব।

class Program
{
    static void Main()
    {
        var eventAggregator = new EventAggregator();
        
        var publisher = new PublisherViewModel(eventAggregator);
        var subscriber = new SubscriberViewModel(eventAggregator);
        
        publisher.SendMessage();  // এই মেসেজটি সাবস্ক্রাইবারে পৌঁছাবে
    }
}

Event Aggregator এর সুবিধা:

  • Loose Coupling: Publisher এবং Subscriber একে অপরের সাথে সরাসরি যোগাযোগ না করে, ইভেন্ট শেয়ার করতে পারে, ফলে কোডের মডুলারিটি বৃদ্ধি পায়।
  • কমপ্লেক্স ইভেন্ট ব্যবস্থাপনা: একাধিক ভিউ এবং ভিউমডেলগুলির মধ্যে ইভেন্ট শেয়ার করার জন্য সহজ এবং কার্যকরী পদ্ধতি।
  • ডাইনামিক ইভেন্টস: ইভেন্টগুলি সিস্টেমের বিভিন্ন অংশে ডাইনামিকভাবে শেয়ার করা যায়, বিশেষ করে যখন একাধিক ভিউমডেল একই ধরনের ইভেন্ট শেয়ার করে।

উপসংহার

Event Aggregator প্যাটার্নটি MVVM আর্কিটেকচারের মধ্যে ভিউ এবং ভিউমডেলের মধ্যে loosely coupled (স্বতন্ত্র) কম্পোনেন্টের মধ্যে বার্তা পাঠানো এবং গ্রহণের জন্য একটি কার্যকরী উপায়। এটি কোডের মডুলারিটি বজায় রাখতে সহায়তা করে এবং ইভেন্ট ব্যবস্থাপনাকে সেন্ট্রালাইজড করে দেয়, যা বড় এবং জটিল অ্যাপ্লিকেশনগুলির জন্য অপরিহার্য।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion